<?php

/**
 * admin actions.
 *
 * @package    Wildlive
 * @subpackage admin
 * @author     Maximilian Lenkeit <dev@lenki.com>
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class adminActions extends sfActions
{

  public function executeTest (sfWebRequest $request)
  {
    $this->unit = OrganizationalUnitTable::getInstance()->findOneByName('Sippe Siebenschläfter');
    //$this->unit = OrganizationalUnitTable::getInstance()->findOneByName('Stamm Silva Abnoba');
  }

  public function executeCsvExport (sfWebRequest $request)
  {
    $members = MemberTable::getInstance()->retrieveForCsvExport();
    $csv_hydrator = new FederalMemberCollectionCsvHydrator($members, 2012);
    $this->csv = $csv_hydrator->hydrate();
  }

  public function executeLoginAs (sfWebRequest $request)
  {
    $current_user = $this->getUser()
      ->getGuardUser();
    try
    {
      $user = $this->getRoute()
        ->getObject();
      $this->getUser()
        ->signIn($user, false);
      $this->getUser()
        ->setFlash(UserFlash::SUCCESS, sprintf('Du bist jetzt angemeldet als %s.', $user->getDisplayName()));
      $this->redirect($this->generateUrl('homepage'));
    }
    catch (Doctrine_Exception $e)
    {
      $this->getLogger()
        ->err($e);
      $this->getUser()
        ->setFlash(UserFlash::ERROR, sprintf('Anmeldung als %s fehlgeschlagen.', $user->getDisplayName()));
      $this->getUser()
        ->signIn($current_user);
      $this->redirect($this->generateUrl('sf_guard_user'));
    }
  }

  public function executeMailNewPassword (sfWebRequest $request)
  {
    $conn = sfGuardUserTable::getInstance()->getConnection();
    $conn->beginTransaction();
    try
    {
      // Change password
      $user = $this->getRoute()
        ->getObject();
      $generator = new PasswordGenerator();
      $new_password = $generator->generate();
      $user->setPassword($new_password);
      $user->save();
      
      // Send email
      $msg = Swift_Message::newInstance();
      $msg->setFrom(sfConfig::get('app_mail_system_sender_address'), sfConfig::get('app_mail_system_sender_name'));
      $msg->setTo($user->getEmailAddress(), $user->getDisplayName());
      $msg->setSubject('Neues Passwort auf wildersueden.org');
      $msg->setBody($this->getPartial('email/new_password', array(
        'user' => $user, 'new_password' => $new_password), 'text/html'));
      $res = $this->getMailer()
        ->send($msg);
      if (! $res)
      {
        throw new Swift_SwiftException("Couldn't send email to " . $msg->getTo());
      }
      
      // Commit
      $conn->commit();
      
      $this->getUser()
        ->setFlash(UserFlash::SUCCESS, sprintf('Ein neues Passwort wurde erfolgreich an %s gesendet.', $user->getDisplayName()));
    }
    catch (Doctrine_Exception $e)
    {
      $this->getLogger()
        ->err($e);
      $this->getUser()
        ->setFlash(UserFlash::ERROR, 
          sprintf('Bei der Durchführung der Transaktion ist ein Fehler aufgetreten, für %s wurde kein neues Passwort erstellt.', 
              $user->getDisplayName()));
      $conn->rollback();
    }
    catch (Swift_SwiftException $e)
    {
      $this->getLogger()
        ->err($e);
      $this->getUser()
        ->setFlash(UserFlash::ERROR, 
          sprintf('Bei der Versendung der Email ist ein Fehler aufgetreten, für %s wurde kein neues Passwort erstellt.', $user->getDisplayName()));
      $conn->rollback();
    }
    
    $this->redirect($this->generateUrl('sf_guard_user'));
  }
}
